BiasAddGrad ================= 计算 BiasAdd 对偏置的梯度:将上游梯度 ``input``(NHWC)沿 N、H、W 求和,得到通道维偏置梯度 ``output``。 .. math:: \mathrm{output}_c = \sum_{n,h,w} \mathrm{input}(n,h,w,c) 其中 :math:`c` 为通道下标,通道数取 ``dims[shape_size - 1]``。 输入: - **input** - 上游梯度地址(NHWC) - **dims** - 维度数组,如 ``[N, H, W, C]`` - **shape_size** - 维数(测试常用 4) - **core_mask** - 核掩码(仅共享存储版本) 输出: - **output** - 偏置梯度地址,长度为通道数 C;调用前通常先清零 支持平台: ``FT78NE`` ``MT7004`` .. note:: - FT78NE 支持 fp32 - MT7004 支持 fp16、fp32 - 布局按 NHWC:最后一维为通道;无 data_format 参数 - 参数顺序:input, output, dims, shape_size **共享存储版本:** .. c:function:: void hp_bias_add_grad_s(float16 *input, float16 *output, int *dims, int shape_size, int core_mask) .. c:function:: void fp_bias_add_grad_s(float *input, float *output, int *dims, int shape_size, int core_mask) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 10 // MT7004 示例(共享存储多核,DDR 地址,NHWC) void TestBiasAddGradSMCFp32(int core_mask) { int core_id = get_core_id(); int logic_core_id = GetLogicCoreId(core_mask, core_id); int core_num = GetCoreNum(core_mask); float *input = (float *)0x81000000; float *output = (float *)0x82000000; int dims[4] = {1, 4, 4, 16}; /* N, H, W, C */ sys_bar(0, core_num); fp_bias_add_grad_s(input, output, dims, 4, core_mask); } void main() { int core_mask = 0b1111; TestBiasAddGradSMCFp32(core_mask); } **私有存储版本:** .. c:function:: void hp_bias_add_grad_p(float16 *input, float16 *output, int *dims, int shape_size) .. c:function:: void fp_bias_add_grad_p(float *input, float *output, int *dims, int shape_size) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 6 // MT7004 示例(私有存储单核,AM 地址,NHWC) void TestBiasAddGradAMFp32(void) { float *input = (float *)0x10010000; float *output = (float *)0x10020000; int dims[4] = {1, 4, 4, 16}; /* N, H, W, C */ fp_bias_add_grad_p(input, output, dims, 4); } void main() { TestBiasAddGradAMFp32(); }